package com.gouwudai.gobbs.dao;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import com.gouwudai.gobbs.common.IPageList;
import com.gouwudai.gobbs.pojo.TbbsUserDetail;
import com.gouwudai.gobbs.pojo.TbbsUserInfo;
import com.litt.core.common.PageParam;
import com.litt.core.exception.DBException;

/**
 * <pre>
 *  Title:TODO
 *  Description: TODO  
 * </pre>
 * 
 * @author <a href="mailto:littcai@hotmail.com">空心大白菜</a>
 * @date 2007-3-29
 * @version 1.0
 * <pre>
 * 修改记录
 *    修改后版本:     修改人：  修改日期:     修改内容: 
 * </pre>
 */
public interface IUserDAO {

	/**
	 * 根据用户名获得用户信息,逻辑删除的除外
	 * @param userId
	 * @return
	 */
	public TbbsUserInfo load(String loginId);

	/**
	 * 用户详细信息
	 * @param userId
	 * @return
	 * @throws DBException
	 */
	public TbbsUserDetail loadDetail(Integer userId);

	/**
	 * 根据用户名获得用户信息
	 * @param userId
	 * @return
	 */
	public TbbsUserInfo load(Integer userId);

	/**
	 * 统计该EMAIL是否被注册
	 * @param userId 大于0时过滤该用户
	 * @param email
	 * @return
	 */
	public int countByEmail(int userId, String email);

	/**
	 * 统计该loginId是否被注册
	 * @param loginId
	 * @return
	 */
	public int countByLoginId(String loginId);

	public int saveUserInfo(TbbsUserInfo userInfo);

	public int saveUserDetail(TbbsUserDetail userDetail);

	/**
	 * 更新用户基本信息
	 * @param userInfo
	 */
	public void updateUserInfo(TbbsUserInfo userInfo);

	/**
	 * 更新用户详细信息
	 * @param userDetail
	 * @throws DBException
	 */
	public void updateUserDetail(TbbsUserDetail userDetail);

	/**
	 * 后台管理中更新用户信息
	 * @param userInfo
	 */
	public void updateAdmin(TbbsUserInfo userInfo);

	/**
	 * 重置密码
	 * @param password
	 * @param userId
	 * @throws DBException
	 */
	public void updatePassword(String password, Integer userId);

	/**
	 * 修改用户等级
	 * @param gradeId
	 * @param userId
	 * @throws DBException
	 */
	public void updateGrade(Integer gradeId, Integer userId);

	/**
	 * 更新用户剩余空间
	 * @param userId
	 * @param size
	 */
	public void updateUpfileUsedSize(Integer size, Integer userId);

	/**
	 * 更新用户头像
	 * @param userId
	 * @param personalPic
	 * @throws DBException
	 */
	public void updatePersonalPic(String personalPic, Integer userId);

	/**
	 * 逻辑删除用户
	 * @param userId
	 * @throws DBException
	 */
	public void deleteLogic(Integer userId);

	/**
	 * 逻辑恢复用户
	 * @param userId
	 * @throws DBException
	 */
	public void doResumeLogic(Integer userId);

	/**
	 * 物理删除用户
	 * @param userId
	 * @throws DBException
	 */
	public void delete(Integer userId);

	/**
	 * 用户登陆更新
	 * @param req
	 */
	public void doLoginUpdate(Integer userId, String loginIp);

	/**
	 * 
	 * @param lastLoginTime
	 * @param loginIp
	 * @param userId
	 * @throws DBException
	 */
	public void doLogoutUpdate(Date lastLoginTime, String loginIp, Integer userId);

	/**
	 * 用户浏览过程中更新积分金币等
	 * @param userId
	 * @param userMoney
	 * @param userMark
	 * @param userCredit
	 * @param userDeposit
	 * @throws DBException
	 */
	public void doBusinessUpdate(Integer userId, BigDecimal userMoney,
			BigDecimal userMark, BigDecimal userCredit, BigDecimal userDeposit);

	/**
	 * 金钱帖购买
	 * @param userId
	 * @param userMoney
	 * @throws DBException
	 */
	public void topicBuyUpdate(Integer userId, BigDecimal userMoney);

	/**
	 * 用户发帖或回复后更新各项参数
	 * @param req
	 */
	public void topicNewOrUpdate(Integer userId, BigDecimal userMoney,
			BigDecimal userMark, BigDecimal userCredit, boolean isRe);

	/**
	 * 查询所有有效用户
	 * @return
	 * @throws DBException
	 */
	public List listAllActive();
    
    /**
     * 查询所有不是指定版面黑名单的有效用户.
     * 
     * @param classId 版面ID
     * 
     * @return the list
     */
    public List listAllClassActive(Integer classId);
    
    /**
     * 查询指定版面黑名单用户.
     * 
     * @param classId 版面ID
     * 
     * @return the list
     */
    public List listAllClassBlack(Integer classId);

	/**
	 * 查询所有等级为gradeId的有效用户
	 * @param gradeIds
	 * @return
	 * @throws DBException
	 */
	public List listAllActiveByGrade(int gradeId);

	/**
	 * 查询所有等级为gradeIds的有效用户
	 * @param gradeIds
	 * @return
	 * @throws DBException
	 */
	public List listAllActiveByGrade(String gradeIds);

	/**
	 * 根据参数名查找用户
	 * @param loginId
	 * @param userName
	 * @param trueName
	 * @param email
	 * @param gradeId
	 * @return
	 * @throws DBException
	 */
	public IPageList listPage(PageParam pageParam);

	/**
	 * 获得用户所在等级的所有权限
	 * @param mgId
	 * @return
	 * @throws DBException
	 */
	public List getGradePermission(Integer gradeId);

}